const { Admin } = require('../models/index')
const { pick } = require('../util/util')

//通过id获取管理员
function getAdmin(params) {
    return new Promise((resolve, reject) => {
        const { admin_id } = params
        Admin.findOne({
            raw: true,
            where: pick({ admin_id })
        }).then(data => {
            resolve(data)
        }).catch(err => {
            reject(`查询管理员失败：${err.message}`)
            logError(`查询管理员失败：${err.message}`)
        })
    })
}

//验证账号密码，并登录
function verifyAdmin(params) {
    return new Promise((resolve, reject) => {
        const { account, password } = params
        Admin.findOne({
            raw: true,
            where: pick({ account, password })
        }).then(data => {
            if (data) {
                Admin.update({ status: 0 }, { where: pick({ account, password }) })
            }
            resolve(data)
        }).catch(err => {
            reject(`验证管理员失败：${err.message}`)
            logError(`验证管理员失败：${err.message}`)
        })

        
    })
}


// 添加管理员
function addAdmin(params) {
    return new Promise((resolve, reject) => {
        const { account, password, name, work_num } = params;

        // 检查是否已经存在相同账号的管理员
        Admin.findOne({
            raw: true,
            where: { account }
        }).then(existingAccount => {
            if (existingAccount) {
                reject('该教师账号已存在');
                return;
            }

            // 检查是否存在对应的教师
            Admin.findOne({
                raw: true,
                where: { work_num, name }
            }).then(existingTeacher => {
                if (!existingTeacher) {
                    reject('不存在对应教师');
                    return;
                }
                // 不允许同一老师反复注册
                if (existingTeacher.account) {
                    reject('该老师已注册账号')
                    return
                }
                Admin.update(
                    { account, password, status: 1 },
                    { where: { work_num, name } }
                ).then(([affectedRows]) => {
                    if (affectedRows === 0) {
                        reject('更新失败：没有记录被更新');
                    } else {
                        resolve('管理员信息更新成功');
                    }
                }).catch(err => {
                    reject(`更新失败：${err.message}`);
                    logError(`更新失败：${err.message}`);
                });
            }).catch(err => {
                reject(`查询教师失败：${err.message}`);
                logError(`查询教师失败：${err.message}`);
            });
        }).catch(err => {
            reject(`查询账号失败：${err.message}`);
            logError(`查询账号失败：${err.message}`);
        });
    })
}

//更改用户密码
function changePassword(params) {
    return new Promise((resolve, reject) => {
        const { admin_id, password } = params
        
        Admin.update({ password }, { where: pick({ admin_id }) }).then(([affectedRows]) => {
            if (affectedRows === 0) {
                reject('更新失败：没有记录被更新');
            } else {
                resolve('密码更新成功');
        }}).catch(err => {
            reject(`更新失败：${err.message}`);
            logError(`更新失败：${err.message}`);
        })
    })
}

//更改用户登录状态
function changeStatus(params) {
    return new Promise((resolve, reject) => {
        const { admin_id } = params
        Admin.findOne({
            raw: true,
            where: pick({ admin_id })
        }).then(data => {
            if(!data){
                reject('查询失败: 无此管理员');
            }
            if (data.status === 0) {
                Admin.update({ status:1 }, { where: pick({ admin_id }) }).then(([affectedRows]) => {
                    if (affectedRows === 0) {
                        reject('更新失败：没有记录被更新');
                    } else {
                        resolve('状态更新成功');
                    }
                }).catch(err => {
                    reject(`更新失败：${err.message}`);
                    logError(`更新失败：${err.message}`);
                })
            }
        })
        
    })
}

// 修改管理员信息
function editAdmin(params) {
    return new Promise((resolve, reject) => {
        const { admin_id, name, avatar, sex, phone_num, qq } = params;
        // 通过admin_id获取管理员信息
        getAdmin({ admin_id })
            .then(existingAdmin => {
                
                // 更新管理员信息
                Admin.update(
                    { name, avatar, sex, phone_num, qq },
                    { where: { admin_id } }
                ).then(([affectedRows]) => {
                    if (affectedRows === 0) {
                        reject('更新失败：没有记录被更新');
                    } else {
                    // 返回信息

                        resolve(params);
                    }
                }).catch(err => {
                    reject(`更新失败：${err.message}`);
                    logError(`更新失败：${err.message}`);
                });
            })
            .catch(err => {
                reject(`查询管理员失败：${err.message}`);
                logError(`查询管理员失败：${err.message}`);
            });
    });
}

module.exports = {
    getAdmin, addAdmin, verifyAdmin,changePassword,changeStatus,editAdmin
}